import { init } from "@/axios/home/index.js"

/**
 * @function 处理时间
 * @description 将时间处理为2023-12-18 15:48:00格式
 * @param  time {Number||String} 传入一个时间戳或者一个时间字符串
 * @author qmc 2023-12-18
 * @version 1.0.0
 * @return {String} 返回:2023-12-18 15:48:00的字符串
 * @example get_now_time()
 */
const get_now_time = (time=null)=>{
    let date;
    // 判断传入的时间戳是否是字符串如果是则变成数字
    if(typeof time === "string"){
        time = Number(time)
    }
    // 如果传入了时间则使用传入的时间
    if(time){
        date = new Date(time)
    }
    // 如果没有传入时间则使用当前时间
    if(!time){
        date = new Date()
    }
    let year = date.getFullYear();
    let month = date.getMonth() + 1;
    let day = date.getDate();
    let hour = date.getHours();
    let minute = date.getMinutes();
    let second = date.getSeconds();
    let time_str =
        year +
        '-' +
        add_zero(month) +
        '-' +
        add_zero(day) +
        ' ' +
        add_zero(hour) +
        ':' +
        add_zero(minute) +
        ':' +
        add_zero(second);
    return time_str;
}

/**
 * @function 补零
 * @description 将0变成'00',1变成'01',10变成'10'
 * @param  value {Number} 传入一个月，日，时，分，秒的数字
 * @author qmc 2023-12-22
 * @version 1.0.0
 * @return {String} 返回:'00'、'01'、'10'
 * @example add_zero(0)
 */
const add_zero = (value)=>{
    if (value < 10 && value > 0) {
        return '0' + value;
    } else if (value > 10) {
        return "" + value;
    } else if (value == 0) {
        return '00';
    }
}

/**
 * @function 生成一个指定区间的随机数包含min与max
 * @description 传入一个最小值5,最大值10,生成类似: 5, 8, 7, 10, 6的数字
 * @param  min {Number} 传入一个最小值
 * @param  max {Number} 传入一个最大值
 * @author qmc 2024-6-25
 * @version 1.0.0
 * @return {Number} 类似:5, 8, 7, 10, 6的数字
 * @example generate_random_number(5,10)
 */
const generate_random_number = (min, max)=>{  
    // 检查参数是否有效  
    if (typeof min !== 'number' || typeof max !== 'number' || min > max || !Number.isInteger(min) || !Number.isInteger(max)) {  
        throw new Error('min, max, must be integers, min should be less than or equal to max');  
    }  
    // 生成一个 min 到 max 之间的随机整数（包括 min 和 max）  
    const randomNum = Math.floor(Math.random() * (max - min + 1)) + min;  
    return randomNum;  
}

/**
 * @function 生成一个指定长度的包含数字与小写字母的字符串
 * @description 传入一个长度:5,生成一个"5duf8"的字符串
 * @param  length {Number} 传入一个长度
 * @author qmc 2024-6-25
 * @version 1.0.0
 * @return {String} 类似:"5duf8"的字符串
 * @example generate_strings_of_any_length(5)
 */

const generate_strings_of_any_length = (length)=>{  
    // 检查参数是否有效  
    if (typeof length !== 'number' || !Number.isInteger(length) || length <= 0) {  
        throw new Error('length, must be an integer, length should be greater than 0');  
    }  
    // 生成一个长度为length的字符串
    let randomStr = ""
    for (let i = 0; i < length; i++) {
       let str = generate_random_number(0,35).toString(36)
       randomStr += str
    }
    return randomStr;  
}


/**
 * @function 发送请求通过cookie实现后台鉴权
 * @description 直接调用该函数,返回当前客户的用户权限
 * @author qmc 2024-7-5
 * @version 1.0.0
 * @return {Object} 类似:{
                user_name,用户名(如未登录这是'用户'加一串6位的随机小写字母与数字)
                user_img,用户头像(如未登录则是使用的默认头像)
                user_permissions,用户的权限(0b011表示普通用户，0b111表示管理员，0b001表示游客)
                user_id,用户的id(如未登录这是null)
            }
 * @example await init_page()
 */
const init_page =async (store)=>{
   let init_page_res = await init()
   if(init_page_res.code === 204){
        return {
            user_name:`用户-${generate_strings_of_any_length(6)}`,
            user_img:`${store.web_url.webPath}/img/default/mrtx.webp`,
            user_permissions:0b001,
            user_id:null
        }
   }else if(init_page_res.code === 200){
        if(init_page_res.data.is_administrators){
            return {
                user_name: init_page_res.data.user_name,
                user_img: init_page_res.data.user_img,
                user_permissions: 0b111,
                user_id:init_page_res.data.id
            }
        }else{
            return {
                user_name: init_page_res.data.user_name,
                user_img: init_page_res.data.user_img,
                user_permissions: 0b011,
                user_id:init_page_res.data.id
            }
        }
   }
}



export {
    get_now_time,
    add_zero,
    init_page,
    generate_strings_of_any_length
}
